<table class="configuration table table-bordered">
    <thead>
        <tr>
            <th class="text-left" style="width: 20%">Key</th>
            <th class="text-left" style="width: 15%">Default</th>
            <th class="text-left" style="width: 10%">Type</th>
            <th class="text-left" style="width: 55%">Description</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><h5>state.backend.forst.cache.dir</h5></td>
            <td style="word-wrap: break-word;">(none)</td>
            <td>String</td>
            <td>The directory where ForSt caches its SST files, fallback to the subdirectory of '/cache' under the value of 'state.backend.forst.local-dir' if not configured.</td>
        </tr>
        <tr>
            <td><h5>state.backend.forst.cache.reserve-size</h5></td>
            <td style="word-wrap: break-word;">256 mb</td>
            <td>MemorySize</td>
            <td>The amount of reserved size on disk space, and remaining space can be leveraged by the cache. The cache will evict the oldest files when the reserved space on disk (the disk where cache directory is) is not enough. User should specify at least one cache size limit to enable the cache, either this option or the 'state.backend.forst.cache.size-based-limit' option. They can be set simultaneously, and in this case, cache will grow if meet the requirements of both two options. If the specified file system of the cache directory does not support reading the remaining space, the cache will not be able to reserve the specified space, hence this option will be ignored. The default value is '256 mb', meaning the disk will be reserved that much space, and the remaining of the disk can be used for cache. A configured value of '0 bytes' means that this option is disabled.</td>
        </tr>
        <tr>
            <td><h5>state.backend.forst.cache.size-based-limit</h5></td>
            <td style="word-wrap: break-word;">0 bytes</td>
            <td>MemorySize</td>
            <td>An upper-bound of the size that can be used for cache. User should specify at least one cache size limit to enable the cache, either this option or the 'state.backend.forst.cache.reserve-size' option. They can be set simultaneously, and in this case, cache will grow if meet the requirements of both two options. The default value is '0 bytes', meaning that this option is disabled. </td>
        </tr>
        <tr>
            <td><h5>state.backend.forst.executor.read-io-parallelism</h5></td>
            <td style="word-wrap: break-word;">3</td>
            <td>Integer</td>
            <td>The number of threads used for read IO operations in the executor.</td>
        </tr>
        <tr>
            <td><h5>state.backend.forst.executor.write-io-parallelism</h5></td>
            <td style="word-wrap: break-word;">1</td>
            <td>Integer</td>
            <td>The number of threads used for write IO operations in the executor. Only valid when 'state.backend.forst.executor.inline-write' is false.</td>
        </tr>
        <tr>
            <td><h5>state.backend.forst.memory.partitioned-index-filters</h5></td>
            <td style="word-wrap: break-word;">true</td>
            <td>Boolean</td>
            <td>With partitioning, the index/filter block of an SST file is partitioned into smaller blocks with an additional top-level index on them. When reading an index/filter, only top-level index is loaded into memory. The partitioned index/filter then uses the top-level index to load on demand into the block cache the partitions that are required to perform the index/filter query. This option only has an effect when 'state.backend.forst.memory.managed' or 'state.backend.forst.memory.fixed-per-slot' are configured.</td>
        </tr>
        <tr>
            <td><h5>state.backend.forst.primary-dir</h5></td>
            <td style="word-wrap: break-word;">"checkpoint-dir"</td>
            <td>String</td>
            <td>The primary directory where ForSt puts its SST files. By default, it will be the same as the checkpoint directory. Recognized shortcut name is 'checkpoint-dir', which means that ForSt shares the directory with checkpoint, and 'local-dir', which means that ForSt will use the local directory of TaskManager.</td>
        </tr>
        <tr>
            <td><h5>state.backend.forst.sync.enforce-local</h5></td>
            <td style="word-wrap: break-word;">true</td>
            <td>Boolean</td>
            <td>Whether to enforce local state for operators in synchronous mode when enabling disaggregated state. This is useful in cases where both synchronous operators and asynchronous operators are used in the same job.</td>
        </tr>
        <tr>
            <td><h5>state.backend.forst.timer-service.cache-size</h5></td>
            <td style="word-wrap: break-word;">128</td>
            <td>Integer</td>
            <td>The cache size per keyGroup of ForSt timer service factory. This option only has an effect when 'state.backend.forst.timer-service.factory' is configured to 'ForStDB'. Increasing this value can improve the performance of ForSt timer service, but consumes more heap memory at the same time.</td>
        </tr>
        <tr>
            <td><h5>state.backend.forst.timer-service.factory</h5></td>
            <td style="word-wrap: break-word;">ForStDB</td>
            <td><p>Enum</p></td>
            <td>This determines the factory for timer service state implementation.<br /><br />Possible values:<ul><li>"HEAP": Heap-based</li><li>"ForStDB": Implementation based on RocksDB</li></ul></td>
        </tr>
    </tbody>
</table>
